import { ApiProperty } from '@nestjs/swagger';
import { modelOptions, prop } from '@typegoose/typegoose';
import { IWebMenu } from 'types/webmenus';
import { IsNotEmpty, IsOptional } from 'class-validator';

@modelOptions({
  // 自动为每个属性添加时间戳
  schemaOptions: {
    timestamps: true,
  },
})
export class WebMenu implements IWebMenu {
  /** 当前菜单的父菜单编码 */
  @ApiProperty({ description: '当前菜单的父菜单编码' })
  @IsNotEmpty({ message: '父菜单编码不能为空' })
  @prop({ required: true })
  parentCode: string;

  /** 当前菜单的父菜单名称 */
  @ApiProperty({ description: '当前菜单的父菜单名称' })
  @IsNotEmpty({ message: '父菜单名称不能为空' })
  @prop({ required: true })
  parentName: string;

  /** 当前菜单的父菜单链接 */
  @ApiProperty({ description: '当前菜单的父菜单链接', required: false })
  @IsNotEmpty({ message: '父菜单链接不能为空' })
  @prop()
  parentLink?: string;

  /** 当前菜单编码 */
  @ApiProperty({ description: '当前菜单编码' })
  @IsNotEmpty({ message: '菜单编码不能为空' })
  @prop({ required: true })
  code: string;

  /** 菜单名称 */
  @ApiProperty({ description: '菜单名称' })
  @IsNotEmpty({ message: '菜单名称不能为空' })
  @prop({ required: true })
  name: string;

  /** 菜单链接 */
  @ApiProperty({ description: '菜单链接', required: false })
  @IsOptional()
  @prop()
  link?: string;

  /** 菜单类型，page单页、list列表页、category分类 */
  @ApiProperty({ description: '菜单类型，1单页、2列表页、3分类', required: false })
  @IsOptional()
  @prop()
  modelType?: 'page' | 'list' | 'category';

  /** 模型ID */
  @ApiProperty({ description: '模型ID', required: false })
  @IsOptional()
  @prop()
  modelId?: string;

  /** 模型名称 */
  @ApiProperty({ description: '模型名称', required: false })
  @IsOptional()
  @prop()
  modelName?: string;

  /** 是否外部链接，1是、2否 */
  @ApiProperty({ description: '是否外部链接，1是、0否', default: 0 })
  @IsOptional()
  @prop({ required: true, default: 0 })
  isOutLink: 0 | 1;

  /** 后台设置的跳转链接 */
  @ApiProperty({ description: '后台设置的跳转链接', required: false })
  @IsOptional()
  @prop()
  outLink?: string;

  /** 是否可点击，1是、0否 */
  @ApiProperty({ description: '是否可点击，1是、0否', default: 1 })
  @IsOptional()
  @prop({ required: true, default: 1 })
  clickable: 0 | 1;

  /** 列表页模板名称 */
  @ApiProperty({ description: '列表页模板名称', required: false })
  @IsOptional()
  @prop()
  listTplName?: string;

  /** 列表页模板ID */
  @ApiProperty({ description: '列表页模板ID', required: false })
  @IsOptional()
  @prop()
  listTplId?: string;

  /** 详情页模板名称 */
  @ApiProperty({ description: '详情页模板名称', required: false })
  @IsOptional()
  @prop()
  detailTplName?: string;

  /** 详情页模板ID */
  @ApiProperty({ description: '详情页模板ID', required: false })
  @IsOptional()
  @prop()
  detailTplId?: string;

  /** 菜单缩略图 */
  @ApiProperty({ description: '菜单缩略图', required: false })
  @IsOptional()
  @prop()
  icon?: string;

  /** 菜单大图 */
  @ApiProperty({ description: '菜单大图', required: false })
  @IsOptional()
  @prop()
  picture?: string;

  /** 菜单标题(V1.3+) */
  @ApiProperty({ description: '菜单标题', required: false })
  @IsOptional()
  @prop()
  title?: string;

  /** 菜单关键字 */
  @ApiProperty({ description: '菜单关键字', required: false })
  @IsOptional()
  @prop()
  keywords?: string;

  /** 菜单描述 */
  @ApiProperty({ description: '菜单描述', required: false })
  @IsOptional()
  @prop()
  description?: string;

  /** 菜单状态 1正常 2停用 */
  @ApiProperty({ description: '菜单状态 1正常 2停用', default: 1 })
  @IsOptional()
  @prop({ required: true, default: 1 })
  status: number;

  /** 菜单排序 */
  @ApiProperty({ description: '菜单排序', default: 0 })
  @IsOptional()
  @prop({ required: true, default: 0 })
  sort: number;
}